<?php
/**
 * User: LRZ
 * Date: 2020/1/17
 * Time: 11:18
 */

/**
 *  941.有效的山脉数组
 *
 *  标签：数组
 *
 *  给定一个整数数组 A，如果它是有效的山脉数组就返回 true，否则返回 false。
 *  让我们回顾一下，如果 A 满足下述条件，那么它是一个山脉数组：
 *      A.length >= 3
 *      在 0 < i < A.length - 1 条件下，存在 i 使得：
 *          A[0] < A[1] < ... A[i-1] < A[i]
 *          A[i] > A[i+1] > ... > A[B.length - 1]
 *   
 *  示例 1：
 *      输入：[2,1]
 *      输出：false
 *
 *  示例 2：
 *      输入：[3,5,5]
 *      输出：false
 *
 *  示例 3：
 *      输入：[0,3,2,1]
 *      输出：true
 *   
 *  提示：
 *      0 <= A.length <= 10000
 *      0 <= A[i] <= 10000 
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/valid-mountain-array
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$A   = [0, 3, 2, 1];
$res = validMountainArray($A);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function validMountainArray($A)
{
    $size = count($A);

    if ($size < 3) {
        return false;
    }

    $maxIndex = array_search(max($A), $A, true);

    if ($maxIndex === 0 || $maxIndex === $size - 1) {
        return false;
    }

    for ($i = 0; $i < $size - 1; $i++) {
        if ($i === $maxIndex && (($A[$maxIndex] <= $A[$maxIndex - 1]) || ($A[$maxIndex] <= $A[$maxIndex + 1]))) {
            return false;
        }
        if (($i < $maxIndex) && $A[$i] >= $A[$i + 1]) {
            return false;
        }
        if (($i > $maxIndex) && $A[$i] <= $A[$i + 1]) {
            return false;
        }
    }
    return true;

}